/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cz.worsik.vypocty.topeni.tepelneztraty.view.mistnosti;

import cz.worsik.vypocty.topeni.tepelneztraty.model.Mistnost;
import cz.worsik.vypocty.topeni.tepelneztraty.model.VychoziHodnoty;
import cz.worsik.vypocty.topeni.tepelneztraty.model.table.StenyTableModel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JTable;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableColumn;
import javax.swing.table.TableModel;

/**
 *
 * @author 231260
 */
public final class StenyTable extends JTable {
	
	public StenyTable(Mistnost mistnost)
	{
		super(new StenyTableModel(mistnost));
		setAutoResizeMode(JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);
		aktualizujTabulku();
	}
	
	public void addPopupListener(VychoziHodnoty vychozi)
	{
		addMouseListener(new PopupListener(vychozi));
	}
	
	public void aktualizujTabulku()
	{
		JTableHeader header = getTableHeader();
		for (int i = 0; i < getModel().getColumnCount(); i++)
		{
			TableColumn col = header.getColumnModel().getColumn(i);
			
			col.setResizable(false);
			col.setPreferredWidth(getModel().getColumnWidth(i));
		}
		// TODO misto listu sten vytvorit tridu, ktera implementuje TableModel
	}
	
	@Override
	public StenyTableModel getModel()
	{
		TableModel model = super.getModel();
		if (model instanceof StenyTableModel)
			return (StenyTableModel) model;
		else
			return null;
	}
	
	public void addStena()
	{
		getModel().addStena();
	}
	
	public void removeStena()
	{
		int row = getSelectedRow();
		
		if (row >= 0)
		{
			getModel().removeStena(row);
			getModel().refresh();
		}
	}
	
	public void addOkno()
	{
		int row = getSelectedRow();
		
		if (row >= 0)
		{
			getModel().addOtvor(row, true);
			getModel().refresh();
			setRowSelectionInterval(row, row);
		}
	}
	
	public void addDvere()
	{
		int row = getSelectedRow();
		
		if (row >= 0)
		{
			getModel().addOtvor(row, false);
			getModel().refresh();
			setRowSelectionInterval(row, row);
		}
	}
	
	public void setSoucinitel_k(Double soucinitel_k)
	{
		int row = getSelectedRow();
		
		if (row >= 0)
		{
			getModel().setSoucinitel_k(row,soucinitel_k);
			getModel().refresh();
			setRowSelectionInterval(row, row);
		}
	}
	
	public class PopupListener extends MouseAdapter
	{
		private VychoziHodnoty vychozi;
		
		public PopupListener(VychoziHodnoty vychozi)
		{
			super();
			this.vychozi = vychozi;
		}
		
		@Override
        public void mouseReleased(MouseEvent e) 
		{
            int r = rowAtPoint(e.getPoint());
            if (r >= 0 && r < getRowCount()) {
                setRowSelectionInterval(r, r);
            } else {
                clearSelection();
            }

            int rowindex = getSelectedRow();
            if (rowindex < 0)
                return;
            if (e.isPopupTrigger() && e.getComponent() instanceof JTable ) {
                JPopupMenu popup = new JPopupMenu();
				
				JMenu zmena_k = new JMenu("Změnit součinitel");
				JMenuItem k_vnejsi = new JMenuItem("vnější stěna");
				JMenuItem k_vnitrni = new JMenuItem("vnitřní stěna");
				JMenuItem k_podlaha = new JMenuItem("podlaha");
				JMenuItem k_strop = new JMenuItem("strop");
				JMenuItem k_strecha = new JMenuItem("střecha");
				
				k_vnejsi.addActionListener(new ActionListener() {

					@Override
					public void actionPerformed(ActionEvent ae) {
						setSoucinitel_k(vychozi.getK_stena_vnejsi());
					}
				});
				k_vnitrni.addActionListener(new ActionListener() {

					@Override
					public void actionPerformed(ActionEvent ae) {
						setSoucinitel_k(vychozi.getK_stena_vnitrni());
					}
				});
				k_podlaha.addActionListener(new ActionListener() {

					@Override
					public void actionPerformed(ActionEvent ae) {
						setSoucinitel_k(vychozi.getK_podlaha());
					}
				});
				k_strop.addActionListener(new ActionListener() {

					@Override
					public void actionPerformed(ActionEvent ae) {
						setSoucinitel_k(vychozi.getK_strop());
					}
				});
				k_strecha.addActionListener(new ActionListener() {

					@Override
					public void actionPerformed(ActionEvent ae) {
						setSoucinitel_k(vychozi.getK_strecha());
					}
				});
				
				zmena_k.add(k_vnejsi);
				zmena_k.add(k_vnitrni);
				zmena_k.add(k_podlaha);
				zmena_k.add(k_strop);
				zmena_k.add(k_strecha);
				/*
				zmena_k.addActionListener(new ActionListener() {

					@Override
					public void actionPerformed(ActionEvent ae) {
						//addOkno();
					}
				});
				*/
				JMenuItem nove_okno = new JMenuItem("Přidat okno");
				nove_okno.addActionListener(new ActionListener() {

					@Override
					public void actionPerformed(ActionEvent ae) {
						addOkno();
					}
				});
				
				JMenuItem nove_dvere = new JMenuItem("Přidat dveře");
				nove_dvere.addActionListener(new ActionListener() {

					@Override
					public void actionPerformed(ActionEvent ae) {
						addDvere();
					}
				});
				
				JMenuItem smaz = new JMenuItem("Odstranit stěnu");
				smaz.addActionListener(new ActionListener() {

					@Override
					public void actionPerformed(ActionEvent ae) {
						removeStena();
					}
				});
				
				popup.add(zmena_k);
				popup.add(nove_okno);
				popup.add(nove_dvere);
				popup.add(smaz);
				
                popup.show(e.getComponent(), e.getX(), e.getY());
            }
        }
	}
}
